/**
 * Multiworker 2000
 * @brief Tela principal
 * @author André Luiz de Oliveira Vasconcelos
 * @file mainwindow.cpp
 * @date 2011
 */

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>

#include "estado.h"

/**
 * Construtor
 */
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->setWindowTitle("Multiworker 2000");
    //this->showMaximized();
    ui->desktop->setLayoutDirection(Qt::LeftToRight);

    // Cria actions usadas na aplicação
    criarActions();

    // Criar menus usados na aplicação
    criarMenus();

    connect(ui->desktop, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(executarItem(QModelIndex)));
    connect(ui->desktop, SIGNAL(pressed(QModelIndex)), this, SLOT(exibirMenuItem(QModelIndex)));

    QTimer::singleShot(0, this, SLOT(atualizarDesktop()));
}

/**
 * Destrutor
 */
MainWindow::~MainWindow()
{
    delete ui;
}

/**
 * setDb
 * @brief Seta o objeto correspondente ao banco de dados
 * @author André Luiz Vasconcelos
 * @param db Objeto do banco
 */
void MainWindow::setDb(QSqlDatabase db)
{
    this->db = db;
}

/**
 * criarActions
 * @brief Cria actions usados na aplicação
 * @author André Luiz Vasconcelos
 */
void MainWindow::criarActions()
{
    abrirItemAction = new QAction(tr("&Abrir"), this);
    connect(abrirItemAction, SIGNAL(triggered()), this, SLOT(abrirItem()));
    renomearItemAction = new QAction(tr("&Renomear"), this);
    connect(renomearItemAction, SIGNAL(triggered()), this, SLOT(renomearItem()));
    alterarPropriedadesItemAction = new QAction(tr("&Propriedades"), this);
    connect(alterarPropriedadesItemAction, SIGNAL(triggered()), this, SLOT(alterarPropriedadesItem()));
}

/**
 * criarMenus
 * @brief Cria menus usados na aplicação
 * @author André Luiz Vasconcelos
 */
void MainWindow::criarMenus()
{
}

/**
 * executarItem
 * @brief Executa ação relacionada ao item clicado
 * @author André Luiz Vasconcelos
 * @param index Índice do item clicado
 */
void MainWindow::executarItem(QModelIndex index)
{
    qDebug() << "Executar item " << index.row();
    // TESTES DURANTE IMPLEMENTAÇÃO
    qDebug() << "TESTES" << index.row();
    Estado *estado = new Estado(); 
    qDebug() << estado->getTabela();
}

/**
 * abrirItem
 * @brief Abrir item selecionado
 * @author André Luiz Vasconcelos
 */
void MainWindow::abrirItem()
{
    // Executa o slot executarItem passando o item selecionado como parâmetro
    executarItem(ui->desktop->currentIndex());
}

/**
 * renomearItem
 * @brief Renomear item selecionado
 * @author André Luiz Vasconcelos
 */
void MainWindow::renomearItem()
{
    qDebug() << "renomear item";
}

/**
 * alterarPropriedadesItem
 * @brief Alterar propriedades do item selecionado
 * @author André Luiz Vasconcelos
 */
void MainWindow::alterarPropriedadesItem()
{
    qDebug() << "alterarPropriedadesItem";
}

/**
 * exibirMenuItem
 * @brief Mostra menu para alterar propriedades do item selecionado
 * @author André Luiz Vasconcelos
 * @param index Índice do item clicado
 */
void MainWindow::exibirMenuItem(QModelIndex index)
{
    // Se o botão direito tiver sido pressionado, mostra o menu
    if(QApplication::mouseButtons() == Qt::RightButton){
        QMenu menuContextoItem(this);
        menuContextoItem.addAction(abrirItemAction);
        menuContextoItem.addAction(renomearItemAction);
        menuContextoItem.addSeparator();
        menuContextoItem.addAction(alterarPropriedadesItemAction);
        menuContextoItem.exec(QCursor::pos());
    }
}

/**
 * atualizarDesktop
 * @brief Atualiza a exibição do desktop da aplicação
 * @author André Luiz Vasconcelos
 */
void MainWindow::atualizarDesktop()
{
   itensDesktop = new QStandardItemModel(this);

   QIcon icon1;
   icon1.addFile(":img/bug.png");

   QIcon icon2;
   icon2.addFile(":img/mail-message-new.png");

   QStandardItem * item1 = new QStandardItem(icon1, "Bug");
   QStandardItem * item2 = new QStandardItem(icon2, "Mail");

   itensDesktop->appendRow(item1);
   itensDesktop->appendRow(item2);

   ui->desktop->setModel(itensDesktop);
}
